/**
 * Author: YuBing 羽冰
 *  time : 2021/5/24
 * description: 建立简单的http服务器
 * dependency module: http、querystring
 */

var http = require("http");
var queryString = require("querystring");
var data = "";
var res, req, Handler, allowOrigin, server;

function createServer(port, ip) {
  server = http.createServer(function (req, res) { serverHandler(req, res); });

  server.listen(port, ip, function () {
    console.log("服务开启");
  })
}
function serverHandler(_req, _res) {
  req = _req;
  res = _res;
  req.on("data", function (_data) { dataHandler(_data) });
  req.on("end", endHandler);
  req.on("error", function (err) { console.log(err); });
}
function dataHandler(_data) {
  data = _data;
}
function endHandler() {
  var UrlData, dataObj, allData;

  res.writeHead(200, {
    "content-type": "text/html;charset=utf-8",
    "Access-Control-Allow-Origin": allowOrigin
  })
  if (req.method !== "GET" && req.method !== "POST") {
    // 既不是get也不是post就不响应
    res.end();
    return;
  }

  // 处理URL携带的数据
  UrlData = (req.url).replace(/^\/(.*?)$/g, "$1").split("?");

  // 如果有data,处理data携带的数据
  if (data) {
    try {
      // 传了json过来
      dataObj = JSON.parse(data);
    } catch (e) {
      // 不是json直接解析
      dataObj = queryString.parse(data);
    }
  }

  allData = {
    // 问号前的
    UrlBefore: UrlData[0],
    // 问号后的
    UrlAfter: UrlData[1],
    "data": dataObj
  }

  Handler(res, allData);
  // 本来想着自动end的，但是考虑到如果有数据库操作就不太好办了，先注释着再想想办法吧，
  // 主要是想做个安全措施
  // 初步的想法是设置标志变量，看看是否有需求使用数据库，如果有就让使用者自己end
  // 如果没有，就用if自动end
  // res.end();
  return;
}

module.export = function (port, ip, EndHandler, AllowOrigin) {
  allowOrigin = AllowOrigin || "*";
  Handler = EndHandler;
  // 建立连接
  createServer(port, ip);
}